From f6e20c9c6e9b50963caaf5483248d329473a6815 Mon Sep 17 00:00:00 2001
From: Gerrit Renker <Gerrit.Renker@ctl.io>
Date: Mon, 21 Jan 2019 09:23:43 -0700
Subject: [PATCH] Drop on_exit(), use standard atexit() instead
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

`on_exit()` is a GLIBC specific extension and not available in musl and uClibc.

Portable applications should avoid this function, and use the standard
`atexit()` instead.

Backported from:f6e20c9c6e9b50963caaf5483248d329473a6815

Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>
---
 iw_if.c   | 10 ++++++----
 iw_if.h   |  2 +-
 iw_scan.c |  2 +-
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/iw_if.c b/iw_if.c
index c0b0128..d8bacbc 100644
--- a/iw_if.c
+++ b/iw_if.c
@@ -87,11 +87,13 @@ int if_set_down(const char *ifname)
 	return if_set_up_or_down(ifname, false);
 }
 
-/** Exit handler to restore interface 'down' state on exit via on_exit(3). */
-void if_set_down_on_exit(int rc, void *arg)
+/** Exit handler to restore interface 'down' state on exit via atexit(3). */
+void if_set_down_on_exit(void)
 {
-	if (if_set_down(arg) < 0) {
-		err_msg("unable to restore %s interface state - set down manually", arg);
+	const char *ifname = conf_ifname();
+
+	if (ifname && if_set_down(ifname) < 0) {
+		err_msg("unable to restore %s interface state - set down manually", ifname);
 	}
 }
 
diff --git a/iw_if.h b/iw_if.h
index 50f5a47..e2199d3 100644
--- a/iw_if.h
+++ b/iw_if.h
@@ -76,7 +76,7 @@ struct if_info {
 };
 extern bool if_is_up(const char *ifname);
 extern int  if_set_up(const char *ifname);
-extern void if_set_down_on_exit(int rc, void *arg);
+extern void if_set_down_on_exit(void);
 extern void if_getinf(const char *ifname, struct if_info *info);
 
 /**
diff --git a/iw_scan.c b/iw_scan.c
index 18e9e06..e2b3067 100644
--- a/iw_scan.c
+++ b/iw_scan.c
@@ -430,7 +430,7 @@ void *do_scan(void *sr_ptr)
 
 				if (if_set_up(conf_ifname()) < 0)
 					err_sys("Can not bring up interface '%s'", conf_ifname());
-				if (on_exit(if_set_down_on_exit, (void *)conf_ifname()) < 0)
+				if (atexit(if_set_down_on_exit) < 0)
 					snprintf(sr->msg, sizeof(sr->msg), "Warning: unable to restore %s down state on exit", conf_ifname());
 				break;
 			}
-- 
2.20.1

